//	COPYRIGHT (C) 1980 BY BOARD OF TRUSTEES,
//	LELAND STANFORD JUNIOR UNIVERSITY

LET RDES0() BE
 $( STATIC $( ITEMS = NIL; NNODES = NIL; NANY = NIL; NITEMS = NIL;
              CTE = NIL; NBRS = NIL; ATS = NIL; MAXUSEDIX = NIL $);

 LET NDIX(CTE) = FETCH(CTE.NUM,CTE);

 MAXUSEDIX:=LISTMAX(CTELIST,NDIX);
 IF MAXUSEDIX<0 DO MAXUSEDIX:=0;
 ITEMS:=LINEIN("");
 NNODES:=ITEMS!2;
 NANY:=ITEMS!4;
 WHILE NANY>0 DO
  $(
  ITEMS:=LINEIN("");
  NITEMS:=ITEMS!0;
  WHILE NITEMS>1 DO 
   $(
   ANYBONDS:=CONS(CONS(ITEMS!2+MAXUSEDIX,ITEMS!4+MAXUSEDIX),ANYBONDS);
   ITEMS+:=4;
   NITEMS-:=2;
   NANY-:=1
   $)
  $);
 WHILE NNODES>0 DO
  $(
  NNODES-:=1;
  CTE:=CREATE(CTE.NUM,CTE.ATS,CTE.HR,CTE.MARKS,CTE.LR,CTE.NBRS);
  ITEMS:=LINEIN("");
  REPLACE(CTE.NUM,CTE,ITEMS!2+MAXUSEDIX);
  ITEMS+:=3;
  NBRS:=@NULL;
  WHILE ITEMS!0=NUMTYPE DO
   $(
   NBRS:=CONS(ITEMS!1+MAXUSEDIX,NBRS);
   ITEMS+:=2
   $);
  REPLACE(CTE.NBRS,CTE,DREVERSE(NBRS));
  ATS:=@NULL;
  WHILE ITEMS!0=STRTYPE DO
   $(
   ATS:=CONS(ITEMS!1,ATS);
   ITEMS+:=2
   $);
  REPLACE(CTE.ATS,CTE,DREVERSE(ATS));
  REPLACE(CTE.HR,CTE,CONS(ITEMS!1,(ITEMS!2=NUMTYPE -> ITEMS!3,RHINF)));
  REPLACE(CTE.LR,CTE,CONS(ITEMS!5,(ITEMS!6=NUMTYPE -> ITEMS!7,RHINF)));
  REPLACE(CTE.MARKS,CTE,ITEMS!9)
  CTELIST:=CONS(CTE,CTELIST)
  $)
 $);

LET READESSTRUC() BE
 $(
 IBLIST:=@NULL;
 ANYBONDS:=@NULL;
 CTELIST:=@NULL;
 RDES0();
 ANYBONDS:=DREVERSE(ANYBONDS);
 CTELIST:=DREVERSE(CTELIST)
 $);

LET WRITEESSTRUC() BE
 $( STATIC $( NANYOUT = NIL $);

 LET OUTRANGE(PR) BE
  $(
  TEST CAR(PR)=RHINF THEN OUTS("ANY ")
  OR OUTNOS(CAR(PR));
  TEST CDR(PR)=RHINF THEN OUTS("ANY ")
  OR OUTNOS(CDR(PR))
  $);

 LET OUTSNUMS(STRNUM) BE
  $(
  OUTSNUM(STRNUM);
  SPACES(1)
  $);

 LET WRITECTE(CTE) BE
  $(
  OUTNOS(FETCH(CTE.NUM,CTE));
  MAPC(FETCH(CTE.NBRS,CTE),OUTNOS);
  MAPC(FETCH(CTE.ATS,CTE),OUTSNUMS);
  OUTRANGE(FETCH(CTE.HR,CTE));
  OUTRANGE(FETCH(CTE.LR,CTE));
  OUTNOL(FETCH(CTE.MARKS,CTE))
  $);

 LET ANYBOUT(PR) BE
  $(
  OUTRANGE(PR);
  NANYOUT+:=1;
  IF NANYOUT LE 10 DO RETURN;
  NEWLINE(1);
  NANYOUT:=0
  $);

 OUTNOS(LENGTH(CTELIST));
 OUTNOL(LENGTH(ANYBONDS));
 NANYOUT:=0;
 MAPC(ANYBONDS,ANYBOUT);
 IF NANYOUT>0 DO NEWLINE(1);
 MAPC(CTELIST,WRITECTE)
 $);
